RxJava তে, Advanced Operators বা উন্নত অপারেশনগুলো ব্যবহার করে আপনি আরও জটিল এবং উন্নত কার্যপ্রণালী তৈরি করতে পারেন। এগুলো সাধারণত ডেটা স্ট্রিমের সাথে আরও পুঙ্খানুপুঙ্খভাবে কাজ করতে এবং বিভিন্ন শর্তের ভিত্তিতে ডেটা প্রসেসিং করতে ব্যবহৃত হয়। এখানে কিছু গুরুত্বপূর্ণ উন্নত অপারেশন ও তাদের উদাহরণ দেয়া হল।
FlatMap Operator
flatMap() অপারেশনটি এক Observable থেকে আউটপুট পাওয়া মানগুলোর ওপর আরও একটি Observable তৈরি করতে ব্যবহৃত হয় এবং তারপর তাদের ফলাফলকে একত্রিত করে। এটি একাধিক স্ট্রিমের মাধ্যমে ডেটা প্রসেসিং করতে সাহায্য করে।
উদাহরণ:
Observable<Integer> observable = Observable.just(1, 2, 3);
observable.flatMap(num -> Observable.just(num * 2, num * 3))
.subscribe(System.out::println);
এখানে, flatMap() অপারেশনটি প্রতিটি মানের জন্য নতুন দুটি স্ট্রিম তৈরি করছে, একটিতে মানটি ২ দিয়ে গুণিত হচ্ছে এবং অন্যটিতে ৩ দিয়ে গুণিত হচ্ছে। আউটপুট হবে:
2
3
4
6
6
9
SwitchMap Operator
switchMap() অপারেশনটি এমন একটি অপারেশন যা প্রথম Observable থেকে ডেটা পাওয়া সাপেক্ষে পরবর্তী Observable নির্বাচন করে। এটি সাধারণত তখন ব্যবহৃত হয় যখন আপনি নতুন কোনো স্ট্রিমে সুইচ করতে চান এবং পূর্ববর্তী স্ট্রিমের সাবস্ক্রিপশনটি ডিসপোজ করতে চান।
উদাহরণ:
Observable<Integer> observable = Observable.just(1, 2, 3);
observable.switchMap(num -> {
if (num == 2) {
return Observable.just(100, 200);
}
return Observable.just(10, 20);
})
.subscribe(System.out::println);
এখানে, যখন মান ২ হয়, তখন switchMap() একটি নতুন স্ট্রিম (100, 200) প্রেরণ করে। আউটপুট হবে:
10
20
100
200
MergeWith Operator
mergeWith() অপারেশনটি একাধিক Observable এর স্ট্রিম একত্রিত করে একটি একক স্ট্রিম তৈরি করতে ব্যবহৃত হয়। এটি merge() অপারেশনের মতো কাজ করে, তবে এটি একটি একক Observable উপর কাজ করে।
উদাহরণ:
Observable<Integer> observable1 = Observable.just(1, 2, 3);
Observable<Integer> observable2 = Observable.just(4, 5, 6);
observable1.mergeWith(observable2)
.subscribe(System.out::println);
এখানে, observable1 এবং observable2 এর ডেটাগুলো একত্রিত হয়ে প্রদর্শিত হবে। আউটপুট হবে:
1
2
3
4
5
6
GroupBy Operator
groupBy() অপারেশনটি একটি Observable এর মানগুলোকে নির্দিষ্ট কriteria এর উপর ভিত্তি করে গ্রুপ করে এবং প্রতিটি গ্রুপের জন্য আলাদা Observable তৈরি করে। এটি মূলত ডেটাকে শ্রেণীবদ্ধ করতে ব্যবহৃত হয়।
উদাহরণ:
Observable<Integer> observable = Observable.just(1, 2, 3, 4, 5, 6);
observable.groupBy(num -> num % 2 == 0 ? "Even" : "Odd")
.subscribe(group -> group.subscribe(value ->
System.out.println(group.getKey() + ": " + value)
));
এখানে, groupBy() অপারেশনটি সংখ্যাগুলোকে দুটি গ্রুপে ভাগ করবে: Even এবং Odd। আউটপুট হবে:
Odd: 1
Odd: 3
Odd: 5
Even: 2
Even: 4
Even: 6
CombineLatest Operator
combineLatest() অপারেশনটি একাধিক Observable এর সর্বশেষ মানগুলিকে একত্রিত করে এবং একটি নতুন মান তৈরি করে। এটি মূলত তখন ব্যবহৃত হয় যখন একাধিক স্ট্রিমের সর্বশেষ ডেটা থেকে একটি নতুন ফলাফল তৈরি করতে হয়।
উদাহরণ:
Observable<Integer> observable1 = Observable.just(1, 2, 3);
Observable<String> observable2 = Observable.just("A", "B");
Observable.combineLatest(observable1, observable2, (num, letter) -> num + letter)
.subscribe(System.out::println);
এখানে, combineLatest() অপারেশনটি observable1 এবং observable2 এর সর্বশেষ মান থেকে একটি নতুন মান তৈরি করবে। আউটপুট হবে:
3B
ConcatMap Operator
concatMap() অপারেশনটি একটি Observable থেকে আউটপুট পাওয়ার পর পরবর্তী Observable তৈরি করতে ব্যবহৃত হয়। এটি flatMap() এর মতো, তবে এক্ষেত্রে সব সাবস্ক্রিপশন একটি নির্দিষ্ট ক্রমে সম্পন্ন হয়, অর্থাৎ প্রথম স্ট্রিমের ডেটা সম্পূর্ণ না হওয়া পর্যন্ত পরবর্তী স্ট্রিম শুরু হয় না।
উদাহরণ:
Observable<Integer> observable = Observable.just(1, 2, 3);
observable.concatMap(num -> Observable.just(num * 2, num * 3))
.subscribe(System.out::println);
এখানে, concatMap() অপারেশনটি প্রথমে ১ এর জন্য সব ডেটা প্রেরণ করবে, তারপর ২ এবং ৩ এর জন্য। আউটপুট হবে:
2
3
4
6
6
9
উপসংহার
RxJava তে Advanced Operators এর মাধ্যমে আপনি আরও জটিল এবং শক্তিশালী অ্যাসিঙ্ক্রোনাস কাজ করতে পারেন। flatMap(), switchMap(), groupBy(), mergeWith() এবং অন্যান্য অপারেশনগুলো ডেটা স্ট্রিমের সাথে গভীরভাবে কাজ করার জন্য কার্যকরী এবং নমনীয় পদ্ধতি প্রদান করে। এই অপারেশনগুলো ব্যবহার করলে আপনি আরও দক্ষ এবং মানসম্পন্ন রিয়্যাকটিভ অ্যাপ্লিকেশন তৈরি করতে পারবেন।
Read more